package com.sinux.sshUser.dao;

import java.io.Serializable;
import java.math.BigInteger;
import java.util.List;
import java.util.Map;

/**
 * @author WangGan
 * @version 2017年5月23日 下午11:04:06 
 * 基础数据库操作类
 * 其他DAO继承此类获取常用的数据库操作方法
 */
public interface BaseDaoI<T> {
	
	/**保存一个对象 (对象)*/
	public Serializable save(T o);
	
	/**删除一个对象(对象)*/
	public void delete(T o);
	
	/**修改一个对象*/
	public void update(String hql,Map<String, Object> params);
	/**更新一个对象(对象)*/
	public void update(T o);
	
	/**保存或更新一个对象(对象)*/
	public void saveOrUpdate(T o);
	
	/**通过主键获得对象    (类名,主键)*/  
	public T get(Class<T> c, Serializable id);
	
	/**通过HQL语句获取一个对象*/
	public T get(String hql);
	
	/**通过HQL语句获取一个对象*/
	public T get(String hql, Map<String, Object> params);
	
	/**获得对象列表*/
	public List<T> find(String hql);
	
	/**获得对象列表   params: 参数*/
	public List<T> find(String hql, Map<String, Object> params);
	
	/**获得分页后的对象列表  page:显示第几页,rows:每页显示多少*/
	public List<T> find(String hql, int page, int rows);
	
	/**获得分页后的对象列表 */
	public List<T> find(String hql, Map<String, Object> params, int page, int rows);
	
	/** 统计数目  HQL语句(select count(*) from T)*/
	public Long count(String hql);
	
	/**统计数目 HQL语句(select count(*) from T where xx = :xx)*/
	public Long count(String hql, Map<String, Object> params);
	
	/**执行一条HQL语句 */
	public int executeHql(String hql);
	
	/**执行一条HQL语句*/
	public int executeHql(String hql, Map<String, Object> params);
	
	/**获得结果集*/
	public List<Object[]> findBySql(String sql);
	
	/**获得结果集*/
	public List<Object[]> findBySql(String sql, int page, int rows);
	
	/**获得结果集*/
	public List<Object[]> findBySql(String sql, Map<String, Object> params);
	
	/**获得结果集*/
	public List<Object[]> findBySql(String sql, Map<String, Object> params, int page, int rows);
	
	/**执行SQL语句*/
	public int executeSql(String sql);
	
	/**执行SQL语句*/
	public int executeSql(String sql, Map<String, Object> params);
	
	/**统计*/
	public BigInteger countBySql(String sql);
	
	/**统计*/
	public BigInteger countBySql(String sql, Map<String, Object> params);
}
